package cn.cloud.project.consumer.config;

import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
import com.alibaba.cloud.nacos.NacosServiceManager;
import com.alibaba.nacos.api.naming.NamingService;
import lombok.AllArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * @author: cql
 * @date: 2024/11/3
 * @description: 在 Nacos 里面会有 NacosNamingService 类，这个类的作用可以注册实例，销毁实例、同时也可以查询实例。
 */
@Configuration
@AllArgsConstructor
public class NacosNamingServiceConfig {

    /**
     * 通过构造器注入该类
     */
    private final NacosServiceManager nacosServiceManager;

    /**
     * 通过构造器注入nacos配置类
     */
    private final NacosDiscoveryProperties nacosDiscoveryProperties;

    /**
     * 可以通过这种方式获取NacosNamingService:
     */
//    @Bean
//    public NacosNamingService nacosNamingService() {
//        try {
//            return new NacosNamingService(nacosDiscoveryProperties.getNacosProperties());
//        } catch (NacosException e) {
//            e.printStackTrace();
//        }
//        return null;
//    }

    /**
     * 文档：https://blog.csdn.net/weixin_42363206/article/details/128517709
     * 也可以通过这种方式获取NacosNamingService: 这种方式可以保证NacosNamingService单例
     */
    @Bean
    public NamingService nacosNamingService() {
        return nacosServiceManager.getNamingService();
    }

}